﻿CREATE PROCEDURE [dbo].[ShiftInLinesUpdate]
(--редактирование строки прихода от межскладского перемещения
	@GoodsId int,
	@BarCode char(12),
	@DocQntty int,  --количество по документу межскладского перемещения
	@Qntty int,			--фактическое количество
	@SupplierGoodsId int,
	@ManufacturerPrice decimal(19, 2),
	@SupplierPrice decimal(19, 2),
	@SupplierSumNOTAX decimal(19, 2),
	@ImportMarkup float,
	@SupplierMarkup float,
	@BatchNumber varchar(20),
	@ReadyBefore smalldatetime,
	@MadeDate smalldatetime,
	@NDSTax tinyint,
	@NDSValue decimal(19, 2),
	@ReestrPrice decimal(19, 2),
	@ReestrDate smalldatetime,
	@GTDNumber varchar(30),
	@CertificateNumber varchar(80),
	@CertificateDate smalldatetime,
	@CertificateOrgId int,
	@RetailMarkup float,
	@RetailPrice decimal(19, 2),
	@ContragentId int, --идентификатор контрагента из приходной накладной от поставщика
	@ContragentDocDate smalldatetime, --дата накладной от поставщика
	@ContragentDocNumber varchar(20), --номер накладной от поставщика
	@ReturnLineId int,		--идентификатор строки расходной накладной
	@Note varchar(250),
	@MD datetime,
	@MW varchar(50),
	@Original_Id int,     --CD.InputLines.Id
	@Original_MD datetime --CD.InputLines.MD
)
AS
DECLARE @strMsg nvarchar(500), @intRet int, @intErrCode int
DECLARE	@orgDocId int, @orgPartyId int
	SET NOCOUNT ON

IF (@GoodsId Is Null) OR (@SupplierGoodsId Is Null) OR (@DocQntty Is Null) OR (@ReturnLineId Is Null) 
BEGIN
	SELECT @intErrCode = 1, @strMsg = 'Неправильные параметры в вызове процедуры ' + Object_Name(@@Procid) + ' !'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

SELECT @orgDocId = I.DocId, @orgPartyId = P.Id
FROM CD.InputLines I LEFT OUTER JOIN CD.Parties P ON I.Id = P.InputLineId AND I.DocId = P.DocId
WHERE I.Id = @Original_Id AND I.MD = @Original_MD

IF (@@rowcount <> 1)
BEGIN
	SELECT @intErrCode = 2, 
	@strMsg = 'Данные изменены после последнего запроса!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

EXEC [dbo].[ProcessStatistic] @Note OUTPUT, @MD OUTPUT, @MW OUTPUT

BEGIN TRAN

IF (@orgPartyId Is Null) 
BEGIN --партии не было
	IF @Qntty Is NOT NULL
	BEGIN --партию надо добавить
--проверка на существование Id равным @Original_Id в таблицах CD.Parties и [CA].[GoodsDocLines] - для совместимость со старыми данными
		IF EXISTS (SELECT Id FROM CD.Parties WHERE Id = @Original_Id)
		BEGIN
--получение значения идентификатора
			EXEC @intRet = dbo.GetNextCounterFor 'GoodsLines', @orgPartyId OUTPUT
			IF @intRet <> 0 RETURN @intRet
		END ELSE BEGIN 
			IF EXISTS (SELECT Id FROM [CA].[GoodsDocLines] WHERE Id = @Original_Id)
			BEGIN
				EXEC @intRet = dbo.GetNextCounterFor 'GoodsLines', @orgPartyId OUTPUT
				IF @intRet <> 0 RETURN @intRet
			END ELSE BEGIN 
				SET @orgPartyId = @Original_Id
			END
		END

		EXEC @intRet = dbo.PartyGoodsInsert	@orgPartyId, @orgDocId, @GoodsId,
		@BarCode, @Qntty, @RetailPrice, @ReturnLineId,
		@Note, @MD, @MW, 1
		IF @intRet <> 0 RETURN @intRet

	END
END ELSE BEGIN --партия была

	IF (@Qntty Is NULL) OR (@Qntty = 0)
	BEGIN --партию надо удалить

		EXEC @intRet = dbo.PartyGoodsDelete @orgPartyId, 1
		IF @intRet <> 0 
		BEGIN
			IF @@trancount > 0 ROLLBACK TRAN
			RETURN @intRet
		END

	END ELSE BEGIN --партию надо обновить

		EXEC @intRet = dbo.PartyGoodsUpdate @orgPartyId, @GoodsId, @Qntty, @RetailPrice, @BarCode, @ReturnLineId, @MD, @MW, 1
		IF @intRet <> 0 
		BEGIN
			IF @@trancount > 0 ROLLBACK TRAN
			RETURN @intRet
		END

	END
END

--	SET NOCOUNT OFF;
	EXEC @intRet = dbo.InputLinesInsertUpdate @orgDocId,@GoodsId,@Qntty,@SupplierGoodsId,@ManufacturerPrice,
	@SupplierPrice,@SupplierSumNOTAX,@ImportMarkup,@SupplierMarkup,@BatchNumber,@ReadyBefore,@MadeDate,
	@NDSTax,@NDSValue,@ReestrPrice,@ReestrDate,@GTDNumber,
	@CertificateNumber,@CertificateDate,@CertificateOrgId,@RetailMarkup,
	@ContragentId,@ContragentDocDate,@ContragentDocNumber,
	@Note,@MD,@MW,
	@Original_Id, 0, @intErrCode OUTPUT
	IF @intRet <> 0 
	BEGIN
		IF @@trancount > 0 ROLLBACK TRAN
		RETURN @intRet
	END

COMMIT TRAN

SELECT Id, DocId, GoodsId, BarCode, DocQntty, Qntty, RetailSum, SupplierGoodsId, ManufacturerPrice, 
SupplierPrice, SupplierSumNOTAX, ImportMarkup, SupplierMarkup, BatchNumber, ReadyBefore, MadeDate, NDSTax, 
NDSValue, ReestrPrice, ReestrDate, GTDNumber, CertificateNumber, CertificateDate, 
CertificateOrgId, RetailMarkup, RetailPrice, ContragentId,  ContragentDocDate, ContragentDocNumber, ReturnLineId,
Note, MD, MW 
FROM dbo.vwInputLines WHERE (Id = @Original_Id)

RETURN 0
